/*
3.10
time:20201028 11:40 AM
key:1.可能没睡醒，好几个地方应该写p1却写成p1->next。
user：ldc
*/
#include <math.h>
#include <iostream>
#include<string>
#include <string>
#include<stack>
using namespace std;

class Node
{
public:
	int data;
	Node* next;
	Node()
	{
		data = 0;
		next = NULL;
	}
};
int main()
{
	Node* head = new Node();
	Node* p1 = new Node();
	stack<Node*> stack_node;
	int i;
	//建立单链表
	p1 = head;
	for (i = 0; i < 10; i++)
	{
		p1->next = new Node();
		p1 = p1->next;
	}
	//遍历单链表输入数据
	p1 = head;
	for (i = 0; i < 10; i++)
	{
		p1->data = i;
		p1 = p1->next;
	}
	//正序遍历并将每一个指针放入栈中
	p1 = head;
	
	while (p1->next != NULL)
	{
		stack_node.push(p1);
		cout << p1->data;
		p1 = p1->next;
	}
	cout << "\n";
	//自上向下遍历栈
	head = stack_node.top();//要保留这个曾经是尾指针的指针，因为等下他就是头了。
	
	while (!stack_node.empty())
	{
		p1 = stack_node.top();
		
		stack_node.pop();
		if (!stack_node.empty())//最后一个节点被提取后不用继续了
		{
			p1->next = stack_node.top();
		}
		else
		{
			p1->next = new Node();//使倒置后的末尾指针不指向倒数第二个指针
		}
	}

	//正序遍历倒置后的指针
	p1 = head;
	while (p1->next != NULL)
		{
		cout << p1->data;
		p1 = p1->next;
		}
	
	}




